<?php
/************************************************************************/
/*                                WEBSHARE                              */
/************************************************************************/
//
// Copyright (c) 2008 by Virginie Vivancos
// http://www.webshare.fr
//
// This program is free software. You can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License.
//
// =======================================================================
// Fonction : Démarrage d'une session publique
// Nom      : public.php
// Version  : 0.6.5
// Date     : 28/05/08
// =======================================================================
header ("Content-type: text/html; charset=utf-8");
session_start();
include_once "fonctions.php";
$l_mysql = new class_mysql();

$_SESSION["ws"]= array();
$deflang=deflang();
include_once "lang/$deflang.lang.php";
$racineServeur= getDocumentRoot();
$racineAppli =  getScriptRoot();
$racineDoc= "$racineAppli/Documents/";
$racineBin= "$racineAppli/Corbeille/";
$racineEdt= "$racineAppli/editor/";
$racineLog= "$racineAppli/logs/";
$pathPass = "$racineAppli/wspasswd/conf.ini";
$_SESSION["ws"]["rootServr"]    = $racineServeur;
$_SESSION["ws"]["rootAppli"]    = $racineAppli;
$_SESSION["ws"]["tempDir"]      = "$racineAppli/wstemp/";
$_SESSION["ws"]["pluginDir"]    = "$racineAppli/plugins/";
$_SESSION["ws"]["listeServeur"] = array(); $nomSrv="";
$_SESSION["ws"]["assoc"]        = array();
$visiteurs = array(); $serveurs = array();
$confnom="";  $conftype=0;

$urlValid= '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Refresh" content="0;URL=start.php"></head></html>';
$urlBack = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Refresh" content="0;URL=index.php"></head></html>';


// ========== Affection du compte ouvert automatiquement =========
                        $login= "Visiteur";
// ===============================================================


  // Ouverture du fichier de configuration et récuperation des informations
  if (is_file($pathPass)!== false) {
    $lines = file($pathPass);

    // Récupération des identifiants de la base de données
    foreach ($lines as $line_num => $line) {
      list($varnom,$valeur)= explode ("=",rtrim($line));
      if (($varnom=="serveurBase")||($varnom=="loginBase")||($varnom=="passBase")||($varnom=="tableBase"))
        $_SESSION["ws"]["$varnom"]= trim($valeur);      
    }

    // Connexion à la base de données et vérification des tables
    $l_mysql->connect();
    if ($l_mysql->test()) {

      // Création des tables si celles-ci sont inexistantes
      if (!$l_mysql->request("SELECT * FROM wslog")   ||!$l_mysql->request("SELECT * FROM wsbase")||
          !$l_mysql->request("SELECT * FROM wsfiles") ||!$l_mysql->request("SELECT * FROM wsuser")||
          !$l_mysql->request("SELECT * FROM wsserver")||!$l_mysql->request("SELECT * FROM wsasso")) {

        // Récupération du fichier ws.sql et création des tables
        $creaTable=@file_get_contents("admin/ws.sql");
        $listTable=explode(";",$creaTable);
        foreach ($listTable as $data)
          $result= $l_mysql->request($data);
      }

      // Dans le pire des cas, les tables n'ont pu être crées -> déconnexion de la base
      if (!$l_mysql->request("SELECT * FROM wslog")) {
        $l_mysql->disconnect();
      }
    }

    if (!$l_mysql->test()) {
    // Lecture des infos à partir du fichier
    
    foreach ($lines as $line_num => $line) {
         if ( preg_match("/^\[($login)\]/",  rtrim($line),$visit)==1 )
            {   $logUser= $visit[1]; $conftype=1; }
     elseif ( preg_match("/^\[([[:alnum:][:space:]_-]+)\]/", rtrim($line),$visit)==1 )
            {   $conftype=0; }
     elseif ( preg_match("/^\[#([[:alnum:][:space:]_-]+)\]/",rtrim($line),$servr)==1 )
            {   $logServ= $servr[1]; $conftype=2; }
       elseif ( preg_match("/^\[\*Webshare\*\]/",rtrim($line))==1 )  { $conftype=3; }
       elseif ( preg_match("/^\[>Associations\]/",rtrim($line))==1 ) { $conftype=4; }
       else {
        list($varnom,$valeur)= explode ("=",rtrim($line));
        $varnom= trim($varnom); $valeur= trim($valeur);

        if (!empty($varnom)) switch ($conftype) {
          // Remplissage des informations utilisateurs
          case 1:
            if (($varnom=="typeUser")||($varnom=="nomUser")||($varnom=="ipUser")||($varnom=="arboUser")||
                ($varnom=="triUser")||($varnom=="visuUser")||($varnom=="prevUser")||($varnom=="langUser")||
                ($varnom=="webUser")||($varnom=="recoUser")||($varnom=="styleUser")||($varnom=="mailUser"))
                 $_SESSION["ws"]["$varnom"]= $valeur;

            if  ($varnom=="varsUser") $_SESSION["ws"]["$varnom"]   = "/$valeur/i";

            if  ($varnom=="styleUser") {
             $_SESSION["ws"]["cheminImg"]  = "style/".$_SESSION["ws"]["styleUser"]."/images/";
             $_SESSION["ws"]["cheminIcn"]  = "style/".$_SESSION["ws"]["styleUser"]."/icones/";
             $_SESSION["ws"]["formatExt"]  = "png";
             $handle = opendir($racineAppli."/".$_SESSION["ws"]["cheminIcn"]);
             while (false !== ($entry = readdir($handle))) {
             if (stristr($entry,".gif")!==false)
                   $_SESSION["ws"]["formatExt"]  = "gif"; }
               closedir($handle); }

              if  (preg_match("/serveur([[:alnum:]]+)/i",$varnom,$numServ)==1) {
                  $_SESSION["ws"]["listeServeur"][$numServ[1]]= $valeur; }

              if  (preg_match("/auth([[:alnum:]]+)/i",$varnom,$numAuth)==1) {
                  $_SESSION["ws"]["$varnom"] = $valeur; }
          break;
          // Remplissage des informations serveurs
          case 2:
            if (!isset($_SESSION["ws"]["$logServ"])) {
              $_SESSION["ws"]["$logServ"] = array();
                $_SESSION["ws"]["$logServ"]["repServeur"] = "/"; $_SESSION["ws"]["$logServ"]["startServeur"]="/";
                $_SESSION["ws"]["$logServ"]["connexion"]  =""; }

            if (($varnom=="typeServeur")||($varnom=="nomServeur")||($varnom=="adrServeur")||($varnom=="logServeur")||
                ($varnom=="passServeur")||($varnom=="portServeur")||($varnom=="repServeur")||($varnom=="startServeur")||
                ($varnom=="webServeur")||($varnom=="binServeur")||($varnom=="protectIndex")||($varnom=="triServeur")||
                ($varnom=="idServeur")||($varnom=="protectHtacc"))
                   $_SESSION["ws"]["$logServ"]["$varnom"]= $valeur;

              if ($varnom=="rootServeur")
                   $_SESSION["ws"]["$logServ"]["$varnom"]= str_replace("\$mydoc\$",$racineDoc,$valeur);
          break;
          // Remplissage des préférences
          case 3:
            $_SESSION["ws"]["clicl"] = 0; $_SESSION["ws"]["clicr"] = 1; $_SESSION["ws"]["clicd"] = 1;
               if (function_exists("ini_set")&&($varnom=="timeUser")) ini_set("session.gc_maxlifetime", "$valeur");

            if (($varnom=="clicl")||($varnom=="clicr")||($varnom=="clicd")||($varnom=="activeLog")||
                ($varnom=="serveurBase")||($varnom=="loginBase")||($varnom=="passBase")||($varnom=="tableBase")||
                ($varnom=="diapoSp")||($varnom=="pageTitle")||($varnom=="vClock")||($varnom=="compPath")||
                ($varnom=="prevAct")||($varnom=="arboLink")||($varnom=="dynWin")||($varnom=="sendMail")||
                ($varnom=="prevWeb")||($varnom=="effectAct")||($varnom=="activeLog")||($varnom=="sepAdr")||
                ($varnom=="prevPDF")||($varnom=="actConf")||($varnom=="linkWin"))
                 $_SESSION["ws"]["$varnom"]= $valeur;
          break;
          // Remplissage des informations d'associations
          case 4:
            $_SESSION["ws"]["assoc"]["$varnom"]= array();
            $datas= explode("|",$valeur);
            $_SESSION["ws"]["assoc"]["$varnom"]["exttype"]= $datas[0];
            $_SESSION["ws"]["assoc"]["$varnom"]["extmime"]= $datas[1];
            $_SESSION["ws"]["assoc"]["$varnom"]["extactp"]= $datas[2];
            $_SESSION["ws"]["assoc"]["$varnom"]["extacts"]= $datas[3];
          break;
        }
      }
    }
    
    
  // Si connexion, on privilégie les informations stockées dans la base
  } else {

    // Remplissage des informations utilisateurs  
    if (($result= $l_mysql->request_result("SELECT * FROM wsuser WHERE nomUser='".trim($login)."' "))!==false) {
        $countUser=1;
        $row = $result[0];
        $nom = $row["nomUser"]; 
        $listeServeur = explode ("|",$row["serveurs"]);
        foreach ($listeServeur as $numero => $data) $_SESSION["ws"]["listeServeur"]["$numero"]= "$data";
        
        foreach ($result[0] as $varnom => $data) {
          if (($varnom=="typeUser")||($varnom=="nomUser")||($varnom=="ipUser")||($varnom=="arboUser")||
              ($varnom=="triUser")||($varnom=="visuUser")||($varnom=="prevUser")||($varnom=="langUser")||
              ($varnom=="webUser")||($varnom=="recoUser")||($varnom=="styleUser")||($varnom=="passUser")||
              ($varnom=="mailUser"))
                $_SESSION["ws"]["$varnom"]= $data;

          if  ($varnom=="varsUser") $_SESSION["ws"]["$varnom"]   = "/$data/i";
          if  (preg_match("/auth([[:alnum:]]+)/i",$varnom,$numAuth)==1) {
            $_SESSION["ws"]["$varnom"] = $data; }

          if  ($varnom=="styleUser") {
            $_SESSION["ws"]["cheminImg"]  = "style/".$_SESSION["ws"]["styleUser"]."/images/";
            $_SESSION["ws"]["cheminIcn"]  = "style/".$_SESSION["ws"]["styleUser"]."/icones/";
            $_SESSION["ws"]["formatExt"]  = "png";
            $handle = opendir($racineAppli."/".$_SESSION["ws"]["cheminIcn"]);
            while (false !== ($entry = readdir($handle))) {
              if (stristr($entry,".gif")!==false)
                $_SESSION["ws"]["formatExt"]  = "gif"; }
              closedir($handle); }
        }
      }         
      
    // Remplissage des informations serveurs      
    if (($result= $l_mysql->request_result("SELECT * FROM wsserver"))!==false) {
      foreach ($result as $row) {
        $nom = $row["nomServeur"];      
        $_SESSION["ws"]["$nom"]= array();      
        $_SESSION["ws"]["$nom"]["repServeur"] = "/"; $_SESSION["ws"]["$nom"]["startServeur"]="/";
        $_SESSION["ws"]["$nom"]["connexion"]  =""; 
        
        foreach ($row as $varnom => $data) {
          if (($varnom=="typeServeur")||($varnom=="nomServeur")||($varnom=="adrServeur")||($varnom=="logServeur")||
              ($varnom=="passServeur")||($varnom=="portServeur")||($varnom=="repServeur")||($varnom=="startServeur")||
              ($varnom=="webServeur")||($varnom=="binServeur")||($varnom=="protectIndex")||($varnom=="triServeur")||
              ($varnom=="idServeur")||($varnom=="protectHtacc"))
                $_SESSION["ws"]["$nom"]["$varnom"]= $data;

          if ($varnom=="rootServeur")
                $_SESSION["ws"]["$nom"]["$varnom"]= str_replace("\$mydoc\$",$racineDoc,$data);
        }        
      }
    }

    // Remplissage des préférences
    if (($result= $l_mysql->request_result("SELECT * FROM wsbase"))!==false) {
      foreach ($result[0] as $varnom => $data) {
        $_SESSION["ws"]["clicl"] = 0; $_SESSION["ws"]["clicr"] = 1; $_SESSION["ws"]["clicd"] = 1;
        if (function_exists("ini_set")&&($varnom=="timeUser")) ini_set("session.gc_maxlifetime", "$data");

        if (($varnom=="clicl")||($varnom=="clicr")||($varnom=="clicd")||($varnom=="activeLog")||
            ($varnom=="serveurBase")||($varnom=="loginBase")||($varnom=="passBase")||($varnom=="tableBase")||
            ($varnom=="diapoSp")||($varnom=="pageTitle")||($varnom=="vClock")||($varnom=="compPath")||
            ($varnom=="prevAct")||($varnom=="arboLink")||($varnom=="dynWin")||($varnom=="sendMail")||
            ($varnom=="prevWeb")||($varnom=="effectAct")||($varnom=="activeLog")||($varnom=="sepAdr")||
            ($varnom=="prevPDF")||($varnom=="actConf")||($varnom=="linkWin"))
        $_SESSION["ws"]["$varnom"]= "$data";
      }
    }
        
    // Remplissage des informations d'associations        
    if (($result= $l_mysql->request_result("SELECT * FROM wsasso"))!==false) {
      foreach ($result as $row) {
        foreach ($row as $varData => $data) { 
            $_SESSION["ws"]["assoc"][$row["type"]]= array();
            $_SESSION["ws"]["assoc"][$row["type"]]["exttype"]= $row["libelle"];
            $_SESSION["ws"]["assoc"][$row["type"]]["extmime"]= $row["mime"];
            $_SESSION["ws"]["assoc"][$row["type"]]["extactp"]= $row["action1"];
            $_SESSION["ws"]["assoc"][$row["type"]]["extacts"]= $row["action2"];
        } 
      }     
    }        

  }    

  } else {
      echo $urlBack; exit;
  }

  if (!isset($_SESSION["ws"]["typeUser"]))
  { echo $urlBack; exit; }

  if (count($_SESSION["ws"]["listeServeur"])) {

    $nomSrv  = $_SESSION["ws"]["listeServeur"][0];
    $_SESSION["ws"]["dossierActif"]=blindeChemin($_SESSION["ws"]["$nomSrv"]["startServeur"]);
    $_SESSION["ws"]["serveurActif"]=$_SESSION["ws"]["$nomSrv"]["nomServeur"];

    $listeTri= explode(",",$_SESSION["ws"]["$nomSrv"]["triServeur"]);
    $tempList= $_SESSION["ws"]["listeServeur"];

    $compt=0;
    foreach ($listeTri as $data) {
      foreach ($tempList as $dataBis) {
        if (($data==$_SESSION["ws"]["$dataBis"]["idServeur"])&&($compt==0)) {
          $_SESSION["ws"]["dossierActif"]=blindeChemin($_SESSION["ws"]["$dataBis"]["startServeur"]);
          $_SESSION["ws"]["serveurActif"]=$_SESSION["ws"]["$dataBis"]["nomServeur"];
          $compt++;
        }
      }
    }

    foreach ($_SESSION["ws"]["listeServeur"] as $nomSrv) {
      $_SESSION["ws"]["$nomSrv"]["rootServeur"] = str_replace("\$user\$",$_SESSION["ws"]["nomUser"],$_SESSION["ws"]["$nomSrv"]["rootServeur"]);
      $_SESSION["ws"]["$nomSrv"]["repServeur"]  = str_replace("\$user\$",$_SESSION["ws"]["nomUser"],$_SESSION["ws"]["$nomSrv"]["repServeur"]);
      $_SESSION["ws"]["$nomSrv"]["startServeur"]= str_replace("\$user\$",$_SESSION["ws"]["nomUser"],$_SESSION["ws"]["$nomSrv"]["startServeur"]);
      if (empty($_SESSION["ws"]["$nomSrv"]["rootServeur"]))
        $_SESSION["ws"]["$nomSrv"]["rootServeur"]=$racineServeur;
    }
    
    if (((fileperms("$racineBin")& 0x4000) == 0x4000)&&(isset($_SESSION["ws"]["binServeur"])))
                                                      $_SESSION["ws"]["repCorbeille"]=$racineBin;
    if ((fileperms("$racineEdt") & 0x4000) == 0x4000) $_SESSION["ws"]["repEditor"]=$racineEdt;
    if ((fileperms("$racineLog") & 0x4000) == 0x4000) $_SESSION["ws"]["repLog"]=$racineLog;
    $_SESSION["ws"]["senstriUser"]="asc";

    if ($_SESSION["ws"]["langUser"]=="Auto") $_SESSION["ws"]["langUser"]  = deflang();

    $_SESSION["ws"]["uniqKey"]= md5(uniqid(rand(), true));
    $tabLog= array("20","1",$_SESSION["ws"]["dia"]["connected"]." ".$_SESSION["ws"]["nomUser"],$_SESSION["ws"]["nomUser"],$_SESSION["ws"]["dossierActif"],"Public","");
    $l_mysql = new class_mysql();
    $l_mysql->connect();
    $l_mysql->logAction($tabLog);
    $l_mysql->disconnect();
    echo $urlValid; exit;

  } else {
    echo $urlBack; exit;
  }

  echo $urlBack; exit;
?>
